home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Games / WHDLoad / Src / slave-examples / newyorkwarriors.asm < prev    next >
Encoding:
Assembly Source File  |  2001-09-23  |  7.9 KB  |  414 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    newyorkwarriors.asm
  3. ;  :Contents.    Slave for "New York Warriors" from Arcadia Systems
  4. ;  :Author.    Wepl
  5. ;  :Original    v1 wepl@whdload.org
  6. ;        v2 chris vella
  7. ;  :Version.    $Id: newyorkwarriors.asm 1.2 2001/09/23 10:04:33 wepl Exp wepl $
  8. ;  :History.    30.08.01 started
  9. ;        09.09.01 support for v2 added
  10. ;  :Requires.    -
  11. ;  :Copyright.    Public Domain
  12. ;  :Language.    68000 Assembler
  13. ;  :Translator.    Devpac 3.14, Barfly 2.9
  14. ;  :To Do.
  15. ;---------------------------------------------------------------------------*
  16.  
  17.     INCDIR    Includes:
  18.     INCLUDE    whdload.i
  19.     INCLUDE    whdmacros.i
  20.     INCLUDE    lvo/intuition.i
  21.  
  22.     IFD BARFLY
  23.     OUTPUT    "wart:n/newyorkwarriors/NewYorkWarriors.Slave"
  24.     BOPT    O+                ;enable optimizing
  25.     BOPT    OG+                ;enable optimizing
  26.     BOPT    ODd-                ;disable mul optimizing
  27.     BOPT    ODe-                ;disable mul optimizing
  28.     BOPT    w4-                ;disable 64k warnings
  29.     SUPER
  30.     ENDC
  31.  
  32. _hadr    = $120
  33.  
  34. ;============================================================================
  35.  
  36. CHIPMEMSIZE    = $100000
  37. FASTMEMSIZE    = $0
  38. NUMDRIVES    = 1
  39. WPDRIVES    = %1111
  40.  
  41. ;BLACKSCREEN
  42. ;DISKSONBOOT
  43. ;HRTMON
  44. ;MEMFREE    = $100
  45. ;NEEDFPU
  46. ;SETPATCH
  47.  
  48. ;============================================================================
  49.  
  50. KICKSIZE    = $40000            ;34.005
  51. BASEMEM        = CHIPMEMSIZE
  52. EXPMEM        = KICKSIZE+FASTMEMSIZE
  53.  
  54. ;============================================================================
  55.  
  56. _base        SLAVE_HEADER            ;ws_Security + ws_ID
  57.         dc.w    13            ;ws_Version
  58.         dc.w    WHDLF_EmulTrap|WHDLF_NoError    ;ws_flags
  59.         dc.l    BASEMEM            ;ws_BaseMemSize
  60.         dc.l    0            ;ws_ExecInstall
  61.         dc.w    _start-_base        ;ws_GameLoader
  62.         dc.w    _data-_base        ;ws_CurrentDir
  63.         dc.w    0            ;ws_DontCache
  64. _keydebug    dc.b    0            ;ws_keydebug
  65. _keyexit    dc.b    $59            ;ws_keyexit = F10
  66. _expmem        dc.l    EXPMEM            ;ws_ExpMem
  67.         dc.w    _name-_base        ;ws_name
  68.         dc.w    _copy-_base        ;ws_copy
  69.         dc.w    _info-_base        ;ws_info
  70.  
  71. ;============================================================================
  72.  
  73.     IFD BARFLY
  74.     DOSCMD    "WDate  >T:date"
  75.     ENDC
  76.  
  77. _name        dc.b    "New York Warriors",0
  78. _copy        dc.b    "1990 Arcadia Systems",0
  79. _info        dc.b    "adapted by Wepl",10
  80.         dc.b    "Version 1.0 "
  81.     IFD BARFLY
  82.         INCBIN    "T:date"
  83.     ENDC
  84.         dc.b    0
  85. _data        dc.b    "data",0
  86. _main        dc.b    "z",0
  87. _highs        dc.b    "highs",0
  88. _intname    dc.b    "intuition.library",0
  89.     EVEN
  90.  
  91. ;============================================================================
  92. _start    ;    A0 = resident loader
  93. ;============================================================================
  94.  
  95.     IFEQ 1
  96.         sub.l    #$1000,a7
  97.         move.l    a0,a2
  98.         lea    _ny,a0
  99.         lea    $1000,a1
  100.         jsr    (resload_LoadFileDecrunch,a2)
  101.         lea    $1000,a0
  102.         sub.l    a1,a1
  103.         jsr    (resload_Relocate,a2)
  104.     mc68020
  105.         movec    vbr,a0
  106.         lea    _trace,a1
  107.         move.l    a1,$24(a0)
  108.         move    #$a700,sr
  109.         jmp    $104e
  110.  
  111. _trace        ;cmp.w    #-1,d7
  112.         ;beq    _ill
  113.         cmp.l    #$1126,(2,a7)
  114.         beq    _f1
  115.         cmp.l    #$1148,(2,a7)
  116.         beq    _ill
  117.         nop
  118.         rte
  119. _f1        move.l    d2,d3
  120.         add.l    #2,(2,a7)
  121.         rte
  122. _ill        illegal
  123.  
  124. _ny        dc.b    "newyork",0
  125.     ;END
  126.     ENDC
  127.  
  128.     ;initialize kickstart and environment
  129.         bra    _boot
  130.  
  131. _bootearly    move.l    (_resload,pc),a2    ;a2 = resload
  132.         move.l    (4),a6            ;a6 = execbase
  133.  
  134.     ;enable cache
  135.     ;    move.l    #WCPUF_Base_NC|WCPUF_Exp_NC|WCPUF_Slave_CB|WCPUF_IC|WCPUF_DC|WCPUF_BC|WCPUF_SS|WCPUF_SB|WCPUF_NWA,d0
  136.         move.l    #0,d0
  137.         move.l    #WCPUF_All,d1
  138.         jsr    (resload_SetCPU,a2)
  139.  
  140.         lea    _intname,a1
  141.         jsr    (_LVOOldOpenLibrary,a6)
  142.         move.l    d0,a6
  143.         lea    _newscreen,a0
  144.         jsr    (_LVOOpenScreen,a6)
  145.         move.l    (4),a6
  146.  
  147.         move.l    #54200,d0
  148.         moveq    #MEMF_CHIP,d1
  149.         jsr    (_LVOAllocMem,a6)
  150.         move.l    d0,a5            ;a5 = main
  151.  
  152.         lea    (_main),a0
  153.         move.l    a5,a1
  154.         jsr    (resload_LoadFileDecrunch,a2)
  155.         
  156.         move.l    a5,a0
  157.         sub.l    a1,a1
  158.         jsr    (resload_Relocate,a2)
  159.         
  160.         move.l    a5,a0
  161.         jsr    (resload_CRC16,a2)
  162.         lea    _pl1,a0
  163.         lea    $af94,a1
  164.         lea    _go1,a4
  165.         cmp.w    #$7be1,d0
  166.         beq    .ok
  167.         lea    _pl2,a0
  168.         lea    $bbd8,a1
  169.         lea    (a5),a4
  170.         cmp.w    #$eb65,d0
  171.         beq    .ok
  172.         pea    TDREASON_WRONGVER
  173.         jmp    (resload_Abort,a2)
  174.  
  175. .ok        add.l    a5,a1
  176.         move.l    a1,_hadr
  177.         move.l    a5,a1
  178.         jsr    (resload_Patch,a2)
  179.         
  180.         lea    _highs,a0
  181.         jsr    (resload_GetFileSize,a2)
  182.         tst.l    d0
  183.         beq    .nohighs
  184.         lea    _highs,a0
  185.         move.l    _hadr,a1
  186.         jsr    (resload_LoadFileDecrunch,a2)
  187.         bsr    _crypt
  188. .nohighs
  189.         clr.l    -(a7)
  190.         pea    (a5)
  191.         pea    WHDLTAG_DBGADR_SET
  192.         move.l    a7,a0
  193.         jsr    (resload_Control,a2)
  194.         
  195.         sub.l    a0,a0            ;cli argument string
  196.         jsr    (a4)
  197.         illegal
  198.         
  199. _go1        move.w    #0,d0            ;start level? but does not work...
  200.         move.l    a5,a4
  201.         add.l    #$ab0c+$7ffe,a4
  202.         jmp    ($2c2,a5)
  203.  
  204. _pl1    PL_START
  205.     PL_S    $d26,$32-$26        ;open doslib
  206.     PL_PS    $30,_load1
  207.     PL_PS    $4a,_load2
  208.     PL_S    $82ce,$dc-$ce
  209.     PL_P    $82e0,_load3
  210.     PL_R    $6282            ;insert disk 2
  211.     PL_PS    $1654,_loadseg
  212.     PL_PS    $17da,_unloadseg
  213.     PL_P    $82f8,_open
  214.     PL_P    $8310,_seek
  215.     PL_P    $8328,_read
  216.     PL_P    $8340,_close
  217.     PL_PS    $1e06,_f1
  218.     PL_S    $cae,$cc6-$cae        ;cia accesses
  219.     PL_PS    $5842,_b1
  220.     PL_P    $6abe,_saveh
  221.     PL_PS    $574a,_b2
  222.     PL_PS    $169c,_f2
  223.     PL_END
  224.  
  225. _pl2    PL_START
  226.     PL_S    $78,$90-$78
  227.     PL_PS    $9a,_load4
  228.     PL_S    $124,2
  229.     PL_S    $128,$140-$128
  230.     PL_PS    $144,_load4
  231.     PL_S    $15c,$162-$15c
  232.     PL_S    $f5c,$32-$26        ;open doslib
  233. ;    PL_PS    $192e,_loadseg2
  234. ;    PL_PS    $1976,_f2
  235. ;    PL_PS    $1ab4,_unloadseg
  236.     ;PL_PS    $210a,_f1
  237. ;    PL_PS    $6180,_b2
  238.     ;PL_PS    $63f8,_b1
  239. ;    PL_R    $6e82            ;insert disk 2
  240. ;    PL_P    $76fc,_saveh
  241.     ;PL_S    $82ce,$dc-$ce
  242.     ;PL_P    $82e0,_load3
  243. ;    PL_P    $8f10,_open
  244. ;    PL_P    $8f28,_seek
  245. ;    PL_P    $8f40,_read
  246. ;    PL_P    $8f58,_close
  247.     PL_END
  248.  
  249. _load4        move.l    a2,-(a7)
  250.         move.l    d2,a1
  251.         move.l    _resload,a2
  252.         jsr    (resload_LoadFileDecrunch,a2)
  253.         move.l    (a7)+,a2
  254.         addq.l    #4,(a7)
  255.         rts
  256.  
  257. _f2        subq.w    #1,d0
  258. .lp        move.w    (a1)+,(a0)+
  259.         dbf    d0,.lp
  260.         rts
  261.  
  262. _saveh        bsr    _crypt
  263.         move.l    #$b00c-$af94,d0
  264.         lea    _highs,a0
  265.         move.l    _hadr,a1
  266.         move.l    _resload,a2
  267.         jsr    (resload_SaveFile,a2)
  268.         bsr    _crypt
  269.         movem.l    (a7)+,d2-d7/a2-a3/a5
  270.         rts
  271.  
  272. _crypt        movem.l    d0/a1,-(a7)
  273.         move.l    _hadr,a1
  274.         move.l    #$b00c-$af94-1,d0
  275. .lp        eor.b    d0,(a1)+
  276.         dbf    d0,.lp
  277.         movem.l    (a7)+,d0/a1
  278.         rts
  279.  
  280. _b2        move.l    (a0)+,d2
  281.         and.l    #$fffff,d2
  282.         move.l    d2,(bltbpt,a3)
  283.         move.l    (a0)+,(bltcpt,a3)
  284.         add.l    #2,(a7)
  285.         rts
  286.  
  287. _b1        BLITWAIT
  288.         move.l    a1,(a5)
  289.         move.l    d1,(a3)
  290.         rts
  291.  
  292. _f1        cmp.l    #0,a5
  293.         bne    .ok
  294. .1        add.l    #$1e64-$1e06-6,(a7)
  295.         rts
  296. .ok        cmp.l    (-4,a5),a3
  297.         bne    .1
  298.         rts
  299.  
  300. _open        movem.l    d1/a6,-(a7)
  301.         move.l    4,a6
  302.         moveq    #8,d0
  303.         moveq    #0,d1
  304.         jsr    (_LVOAllocMem,a6)
  305.         move.l    d0,a0
  306.         clr.l    (a0)+
  307.         move.l    (a7)+,(a0)
  308.         move.l    (a7)+,a6
  309.         rts
  310. _seek        move.l    d1,a0
  311.         move.l    (a0),d0
  312.         tst.w    d3
  313.         beq    .cur
  314.         cmp.w    #1,d3
  315.         beq    .end
  316. .beg        move.l    d2,(a0)
  317.         rts
  318. .cur        add.l    d2,(a0)
  319.         rts
  320. .end        movem.l    d0-d1/a0,-(a7)
  321.         move.l    d2,(a0)+
  322.         move.l    (a0),a0
  323.         move.l    _resload,a1
  324.         jsr    (resload_GetFileSize,a1)
  325.         move.l    (8,a7),a0
  326.         add.l    d0,(a0)
  327.         movem.l    (a7)+,d0-d1/a0
  328.         rts
  329. _read        move.l    d1,a1
  330.         movem.l    d1/a1-a2,-(a7)
  331.         move.l    (a1)+,d1    ;offset
  332.         move.l    (a1),a0        ;filename
  333.         move.l    d2,a1        ;buffer
  334.         move.l    d3,d0        ;length
  335.         move.l    _resload,a2
  336.         jsr    (resload_LoadFileOffset,a2)
  337.         movem.l    (a7)+,d1/a1-a2
  338.         add.l    d3,(a1)
  339.         move.l    d3,d0
  340.         rts
  341. _close        move.l    a6,-(a7)
  342.         move.l    d1,a1
  343.         move.l    #8,d0
  344.         move.l    4,a6
  345.         jsr    (_LVOFreeMem,a6)
  346.         move.l    (a7)+,a6
  347.         rts
  348.  
  349. _load1        move.l    d1,a1        ;filename
  350.         rts
  351. _load2        move.l    a2,-(a7)
  352.         move.l    _resload,a2
  353.         move.l    a1,a0
  354.         move.l    d2,a1
  355.         jsr    (resload_LoadFileDecrunch,a2)
  356.         move.l    d0,d2
  357.         move.l    (a7)+,a2
  358.         add.l    #6,(a7)
  359.         rts
  360. _load3        move.l    _resload,a2
  361.         move.l    d2,a1
  362.         jsr    (resload_LoadFileDecrunch,a2)
  363.         move.l    d0,d1
  364.         movem.l    (a7)+,d2-d4/a2
  365.         rts
  366.  
  367. _loadseg2    addq.l    #5,a0            ;skip "NYW2:"
  368. _loadseg    move.l    a0,-(a7)
  369.         move.l    #16508,d0        ;max len of 'object?'
  370.         move.l    d0,-(a7)
  371.         moveq    #0,d1
  372.         move.l    (4),a6
  373.         jsr    (_LVOAllocMem,a6)
  374.         move.l    d0,a2
  375.         move.l    (a7)+,(a2)
  376.         move.l    (a7)+,a0
  377.         lea    (4,a2),a1
  378.         move.l    _resload,a6
  379.         jsr    (resload_LoadFileDecrunch,a6)
  380.         lea    (4,a2),a0
  381.         sub.l    a1,a1
  382.         jsr    (resload_Relocate,a6)
  383.         move.l    a2,d0
  384.         lsr.l    #2,d0
  385.         rts
  386. _unloadseg    lsl.l    #2,d1
  387.         move.l    d1,a1
  388.         move.l    (a1),d0
  389.         move.l    (4),a6
  390.         jsr    (_LVOFreeMem,a6)
  391.         addq.l    #2,(a7)
  392.         rts
  393.  
  394. _newscreen    dc.w    0        ;LeftEdge
  395.         dc.w    0        ;TopEdge
  396.         dc.w    320        ;Width
  397.         dc.w    -1        ;Height
  398.         dc.w    1        ;Depth
  399.         dc.b    0,0        ;DetailPen,BlockPen
  400.         dc.w    0        ;ViewModes
  401.         dc.w    $10f        ;Type
  402.         dc.l    0        ;Font
  403.         dc.l    0        ;Title
  404.         dc.l    0        ;Gadgets
  405.         dc.l    0        ;CustomBitmap
  406.  
  407. ;============================================================================
  408.  
  409.     INCLUDE    Sources:whdload/kick13.s
  410.  
  411. ;============================================================================
  412.  
  413.     END
  414.